/***************************************************************************
 创建者: 华磊
 开始时间: 2018.8.14
 copyright: (C) 华友高科
 修改说明: (每次有修改就添加一条，带有 修改人，修改时间，修改描述)
 example (1) hualei 2017.5.8 类的具体实现代码编写

 ***************************************************************************
 *  @file x.h
 *  功能:
 *
 *                                                                         *
 ***************************************************************************/
#ifndef SAFEWATCHDOG_H
#define SAFEWATCHDOG_H
#include <qdebug.h>
//#include <time.h>


enum E_DOG_STATE
{
    E_DOG_STATE_NORMAL,
    E_DOG_STATE_FAILED,
    E_DOG_STATE_FAILED_PROCESSED
};

enum E_DOG_CLASS_ID
{
    E_DOG_CLASS_ID_POWER_MANAGER=2,

};

/**
 * @brief The SafeWatchDog class 看门狗
 */
class SafeWatchDog
{
public:

    /**
     * @brief SafeWatchDog
     * @param maxTimeIntervalIn 单位mS ,最大运行喂狗间隔
     * @param checkTimeIntervalIn 单位mS ,检查狗时间
     * @param classPtrIn 注册处理类指针
     * @param classIdIn 类类型
     */
    SafeWatchDog(double maxTimeIntervalIn, double checkTimeIntervalIn,void* classPtrIn,int classIdIn);
    ~SafeWatchDog();

public:
    int startDog();
    int resetDog();
    int feedDog();
    long getDogState();
    long getDogLastFeedTimeLength();// unit is ms
    int killThread();


private:
    void* threadRun(void *);
    static void* threadTask( void* classPtr );
    void createThread();

private:
    bool startDogFlag;
    int dogState;
    struct timespec dogLastTime;
    double maxTimeInterval;
    double checkTimeInterval;
    void* classPtr;
    int classId;
    pthread_t threadId;

};

#endif // SAFEWATCHDOG_H
